package cn.edu.cug.cs.gtl.apis.render;

import cn.edu.cug.cs.gtl.apis.render.basics.Matrix;
import cn.edu.cug.cs.gtl.apis.render.basics.Vec3f;
import cn.edu.cug.cs.gtl.apis.render.basics.Vec4f;
import cn.edu.cug.cs.gtl.apis.render.details.Detail;
import cn.edu.cug.cs.gtl.apis.render.nodes.Node;
import cn.edu.cug.cs.gtl.apis.render.paths.Path;

public interface PickedPoint extends NativeObjectWrapper{
    PickedPoint	copy();
    Detail getDetail();
    //Calls getDetail((com.openinventor.inventor.nodes.SoNode)null).
    Detail	getDetail(Node node);
    //Returns the detail that corresponds to the specified node in the path returned by getPath().

    Matrix getImageToObject();
//    Calls getImageToObject((com.openinventor.inventor.nodes.SoNode)null).

    Matrix	getImageToObject(Node node);
//    Returns the texture transformation matrix between image space and the object space corresponding to the given node in the path.

    int	getMaterialIndex();
//    Returns the index into the current set of materials of the material active at the intersection point.

    Vec3f getNormal();
//    Returns the surface normal in world space.

    Vec3f	getObjectNormal();
//    Calls getObjectNormal((com.openinventor.inventor.nodes.SoNode)null).

    Vec3f	getObjectNormal(Node node);
//    Returns the surface normal in the object space corresponding to the given node in the path.

    Vec3f	getObjectPoint();
//    Calls getObjectPoint((com.openinventor.inventor.nodes.SoNode)null).

    Vec3f	getObjectPoint(Node node);
//    Returns the intersection point in the object space corresponding to the given node in the path.

    Vec4f getObjectTextureCoords();
//    Calls getObjectTextureCoords((com.openinventor.inventor.nodes.SoNode)null).

    Vec4f	getObjectTextureCoords(Node node);
//    Returns the texture coordinates in the object space corresponding to the given node in the path.

    Matrix	getObjectToImage();
//    Calls getObjectToImage((com.openinventor.inventor.nodes.SoNode)null).

    Matrix	getObjectToImage(Node node);
//    Returns the texture transformation matrix between the object space and image space corresponding to the given node in the path.

    Matrix	getObjectToWorld();
//    Calls getObjectToWorld((com.openinventor.inventor.nodes.SoNode)null).

    Matrix	getObjectToWorld(Node node);
//    Returns the transformation matrix between the object space and world space corresponding to the given node in the path.

    Path	getPath();
//    Returns the path to the object that was intersected.

    Vec3f	getPoint();
//    Returns the intersection point in world space.

    Vec4f	getTextureCoords();
//    Returns the texture coordinates in image space.

    Matrix	getWorldToObject();
//    Calls getWorldToObject((com.openinventor.inventor.nodes.SoNode)null).

    Matrix	getWorldToObject(Node node);
//    Returns the transformation matrix between world space and the object space corresponding to the given node in the path.

    boolean	isOnGeometry();
//    Returns whether the intersection is actually on the geometry of the character that was hit, as opposed to being on the bounding box.

    void	setDetail(Detail detail, Node node);

    void	setMaterialIndex(int index);

    void	setObjectNormal(Vec3f normal);

    void	setObjectTextureCoords(Vec4f texCoords);

}
